/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package bd2_xml.manipulacaoXML;

import bd2_xml.modelo.CampoTabela;
import bd2_xml.persistencia.Deletar;
import bd2_xml.persistencia.Inserir;
import bd2_xml.persistencia.Selecionar;
import bd2_xml.visual.Principal;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import org.jdom2.Document;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.jdom2.Element;
import org.omg.CORBA.portable.Delegate;

/**
 *
 * @author comp1
 */
public class LerXML {

    public static void lerArquivoXML() {
        String SQLtabela = "CREATE TABLE " + Principal.TFNometabela.getText() + " (\n";
        String insertCompos = "INSERT INTO " + Principal.TFNometabela.getText() + " (";
        String insertDados = "VALUES (";
        boolean tabelaExiste = false;

        ArrayList<CampoTabela> cabecalho = new ArrayList<CampoTabela>();
        Document doc = null;
        SAXBuilder builder = new SAXBuilder();
        try {
            doc = (Document) builder.build(Principal.TFXML.getText());
        } catch (JDOMException ex) {
            Logger.getLogger(LerXML.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(LerXML.class.getName()).log(Level.SEVERE, null, ex);
        }



        Element datapacket = doc.getRootElement();
        Element metadata = datapacket.getChild("METADATA");
        Element rowdata = datapacket.getChild("ROWDATA");
        Element fieldsmetadata = metadata.getChild("FIELDS");
        List<Element> listametadata = fieldsmetadata.getChildren();

        System.out.println("\n\n\nSaida XML=> MATADADOS\n\n");

        for (Element e : listametadata) {
            cabecalho.add(new CampoTabela(e.getAttributeValue("attname"), e.getAttributeValue("fieldtype")));
            SQLtabela += e.getAttributeValue("attname") + " " + e.getAttributeValue("fieldtype");

//            System.out.println("Nome: " + e.getAttributeValue("attname"));
//            System.out.println("Tipo: " + e.getAttributeValue("fieldtype"));

            if ((!e.getAttributeValue("fieldtype").equals("INTEGER")) && (!e.getAttributeValue("fieldtype").equals("DATE"))) {
//                System.out.println("Tamanho: " + e.getAttributeValue("WIDTH"));
                SQLtabela += "(" + e.getAttributeValue("WIDTH");
                if (e.getAttributeValue("fieldtype").equals("NUMERIC")) {
//                    System.out.println("Pecisão: " + e.getAttributeValue("DECIMALS"));
                    SQLtabela += "," + e.getAttributeValue("DECIMALS");
                }
                SQLtabela += ")";
            }
            if (e.getAttributeValue("required") != null) {
//                System.out.println("NOT NULL: " + e.getAttributeValue("required"));
                SQLtabela += " NOT NULL";
            }
            SQLtabela += ",\n";
        }
        SQLtabela = SQLtabela.substring(0, SQLtabela.length() - 2);
        SQLtabela += "\n)";
        
        
        //aqui que deve ser testado se a tabela existe
        try {
            if (!Inserir.sqlLivre(SQLtabela)) {
                int teste = JOptionPane.showConfirmDialog(null, "A Tabela já existe, dejega deletar a tabela?");
                if (teste == 0) {
                    Deletar.dropTabela(Principal.TFNometabela.getText());
                    try {
                        Inserir.sqlLivre(SQLtabela);
                    } catch (IOException ex) {
                        Logger.getLogger(LerXML.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    
                } else {
                    tabelaExiste = true;
                }
            }
        } catch (IOException ex) {
            Logger.getLogger(LerXML.class.getName()).log(Level.SEVERE, null, ex);
        }



        System.out.println(SQLtabela);

        System.out.println("\n\n\nSaida XML=> DADOS\n\n");

        List<Element> listaroedata = rowdata.getChildren();
        for (Element e : listaroedata) {
            for (int i = 0; i < cabecalho.size(); i++) {
                if (e.getAttributeValue(cabecalho.get(i).getNome()) != null) {
                    System.out.println(cabecalho.get(i).getNome() + ": " + e.getAttributeValue(cabecalho.get(i).getNome()));
                    insertCompos += cabecalho.get(i).getNome() + ", ";
                    if (cabecalho.get(i).getTipo().equals("VARCHAR") || cabecalho.get(i).getTipo().equals("DATE")) {
                        insertDados += "'" + e.getAttributeValue(cabecalho.get(i).getNome()) + "', ";
                    } else {
                        insertDados += "" + e.getAttributeValue(cabecalho.get(i).getNome()) + ", ";
                    }
                }

            }

            insertDados = insertDados.substring(0, insertDados.length() - 2);
            insertDados += ");";
            insertCompos = insertCompos.substring(0, insertCompos.length() - 2);
            insertCompos += ") " + insertDados;
            if (!tabelaExiste) {
                try {
                    Inserir.sqlLivre(insertCompos);
                } catch (IOException ex) {
                    Logger.getLogger(LerXML.class.getName()).log(Level.SEVERE, null, ex);
                }
                
                System.out.println(insertCompos);
            }
        }

    }
}
